package day10;
/**
 * @author yt1105
 * @version 1.0
 */
@SuppressWarnings("all")
public class StringExercise {
    public static void main(String[] args) {
//        String a="yt";//指向常量池的
//        String b=new String("yt");//指向堆中的对象
//        System.out.println(a.equals(b));//t
//        System.out.println(a==b);//f
//        System.out.println(a==b.intern());//t
//        System.out.println(b==b.intern());//f
        //1.string 是一个final类，代表不可改变的字符序列，字符串是不可变得，一个字符串对象。一旦被分配。其内容是不可改变的的
        //下面究竟创建了几个对象。
//        String s1="hello";//s1->常量池里的（“hello”）
//        s1="haha";//你以为是改变？？？ 其实根本不是的 其实是让s1->"haha" 也就是创建了两个对象 并不是直接把hello改成了haha
//        //1.
//        String a="hello"+"abc";//创建了几个对象？？？这句话其实编译器是会优化的，他是不会傻到创建2个 他会直接帮助你拼接成"helloabc"
        //=============
        String a="hello";
        String b="abc";
        String c=a+b;//创建了几个对象，画出内存分布图请
        //注意此时的a和b已经不是常量了 而是变量了 关键就是分析String c=a+b;怎么做的
        //一共有三个对象
        //1.先创建了一个StringBuilder sb=new StringBuilder();
        //2.执行sb.append("hello");
        //3.sb.append("abc");
        //4.String c=sb.toString();
        //其实本质还是new了一个对象出来 大家可以使用debug进行追踪 最终看看结果是什么就行
        // 看源码学习！！！ 看源码学习绝对是会上一个台阶

    }
}
